package br.com.games.hefesto;

/**
 * Representa um lance do jogo
 * 
 * @param <Moveable> Objeto que pode ser lancado durante o jogo
 * 
 * @since 2013
 * @author <a href="mailto:fernando.schindler@gmail.com">Fernando Schindler</a>
 */
public class Move<Moveable> implements Comparable<Move<Moveable>> {

	/**
	 * Criar um novo movimento
	 * @param game
	 * @param toActive
	 */
	public Move(Moveable toActive) {
		this.move = toActive;
	}

	/**
	 * Indica se esse movimento é vitoria
	 * @return {@link Boolean}
	 */
	public boolean isVictory(){
		return false;
	}
	
	/**
	 * 
	 * @return
	 */
	public Moveable getMoveable(){
		return this.move;
	}

	/**
	 * Indica o quanto esse movimento valerá
	 * @return
	 */
	public short getWeight() {
		return this.value;
	}

	/**
	 * @param value o quanto esse movimento valerá
	 */
	public void setWeight(short value) {
		this.value = value;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Comparable#compareTo(java.lang.Object)
	 */
	@Override
	public int compareTo(Move<Moveable> o) {
		return o.value- this.value;
	}
	
	/*
	 * (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return String.format("(%s : M: %d)", move, value);
	}
	
	/**
	 * Campos privados
	 */
	private Moveable move;
	private short value = 0;
}
